La Capacità di Calcolo (CC) agisce come ponte di versionamento tra architettura virtuale (PTX) e architettura reale (SASS/Binario). Gli sviluppatori usano nvcc per mirare piattaforme specifiche, che vanno da piattaforme desktop/server a piattaforme incorporate, attraverso modelli di sistema operativo come Linux 64-bit (LP64) oppure Windows 64-bit (LLP64).
1. Architetture Virtuali vs. Reali
Il toolkit CUDA supporta le architetture GPU delle ultime due versioni principali, riportate in Tabella 29: Supporto delle funzionalità nelle Capacità di Calcolo (da 7.5 a 12.x). Definiamo i mapping usando flag come: nvcc --generate-code arch=compute_80,code=sm_90 prog.cu. Per obiettivi futuri, si usano flag come nvcc -arch=sm_100 o varianti specializzate come nvcc -arch=sm_100a vengono utilizzati.
2. Gerarchia dei Macro
Il compilatore usa __CUDA_ARCH__ per ramificare il codice. Il macro __CUDA_ARCH__ è definito solo nel codice dispositivo (ad esempio, __device__, __global__). Un controllo più fine è fornito da __CUDA_ARCH_SPECIFIC__ e __CUDA_ARCH_FAMILY_SPECIFIC__. Alcune funzionalità, come Memoria condivisa distribuita o specifici payload NaN, richiedono Capacità di Calcolo 9.0+ oppure Capacità di Calcolo 10.0 e successive.
3. Limiti e vincoli numerici
La precisione varia in base alla CC; ad esempio, il trattamento dei numeri sottili garantisce $2^{-16382} \approx 3.36 \cdot 10^{-4932}$. I limiti hardware come CUDA_DEVICE_MAX_COPY_CONNECTIONS=16 o il direttiva .maxnreg PTX sono rigorosamente imposti in base alla versione CC di destinazione.